package nominalitzacions.domain;
import java.io.FileNotFoundException;
import java.io.IOException;
import nominalitzacions.persistance.FormsDataManager;
import java.util.ArrayList;
import java.util.Iterator;

/**
 *
 * @author sonia.sandalinas
 */

public class CreateVerbalForms {
    public CreateVerbalForms(){

    }

    public NominalizatorDictionary generateVerb(NominalizatorDictionary dicoInf,
            NominalizatorDictionary dicoIrreg) {
        ArrayList<String> arrDicoInf = dicoInf.getAllDiccionary();
        ArrayList<String> arrDicoConj = new ArrayList<String>();
        for (int i = 0; i < arrDicoInf.size(); ++i) {
            arrDicoConj.add(arrDicoInf.get(i) );
            generatePresent(arrDicoInf.get(i), arrDicoConj);
            generatePresentParticiple(arrDicoInf.get(i), arrDicoConj);
            generatePastParticiple(arrDicoInf.get(i), arrDicoConj);
        }
        
        ArrayList<String> arrDicoIrreg = dicoIrreg.getAllDiccionary();
        for (int i = 0; i < arrDicoIrreg.size(); ++i) {
            arrDicoConj.add(arrDicoIrreg.get(i) );
            generatePresent(arrDicoIrreg.get(i), arrDicoConj);
            generatePresentParticiple(arrDicoIrreg.get(i), arrDicoConj);
        }
        /*
        ArrayList<String> s = new ArrayList<String>();
        ArrayList<String> arrDicoInf = dicoInf.getAllDiccionary();
        Iterator itdiccionari = arrDicoInf.iterator();
        while (itdiccionari.hasNext()) {
            String verb = (String)itdiccionari.next();
            if (dicoIrreg.findWord(verb) ) {
                generatePresent(verb,s);
                generatePresentParticiple(verb,s);
            }
            else {
                generatePastParticiple(verb,s);
                generatePresent(verb,s);
                generatePresentParticiple(verb,s);
            }
        }*/

        NominalizatorDictionary nd = new NominalizatorDictionary();
        nd.setAllDiccionary(arrDicoConj);
        return nd;
    }

    private void generatePresent (String p, ArrayList<String> s){
        if (p.equals("be")) {
            s.add("am");
            s.add("is");
            s.add("are");
        }
        else if (p.equals("have")) {
            s.add("has");
        }
        else if (p.length() < 3) {
            int tamany = p.length();
            char m = p.charAt(tamany-1);
            if (m == 'x' || m == 'o' || m == 's' || m == 'z') {
                String fi1 = p.concat("es");
                s.add(fi1);
            }
            else {
                String fi1 = p.concat("s");
                s.add(fi1);
            }
        }
        else {
            int n = p.length();
            String part = null;
            if (n >= 3) {
                part = p.substring(0,n-3);
                int m = n - 3;
                char c = p.charAt(m);
                char v = p.charAt(m+1);
                char f = p.charAt(n-1);
                if (f == 'y' & (v == 'a' || v == 'e' || v == 'i' || v == 'o' || v == 'u')) {
                    String fi1 = p.concat("s");
                    s.add(fi1);
                }
                else if(f =='e'){
                    String fi = p.concat("s");
                    s.add(fi);
                }
                else if (f == 'o' || (f == 'h' & (v == 'c'|| v == 's'))) {
                    String fi = p.concat("es");
                    s.add(fi);
                }
                else if (f == 'y') {
                    String fin = p.substring(0,n-1);
                    String fi = fin.concat("ies");
                    s.add(fi);
                }
                else {
                    String fi = p.concat("s");
                    s.add(fi);
                }
            }
        }
    }

    private void generatePresentParticiple (String p, ArrayList<String> s) {
        if (p.length() < 3) {
            String fi = p.concat("ng");
            s.add(fi);
            fi = p.concat("ing");
            s.add(fi);
            char f = p.charAt(p.length() -1);
            fi = p.valueOf(f);
            String fin = p.concat(fi);
            fi = fin.concat("ing");
            s.add(fi);
        }
        else {
            int n = p.length();
            String part = p.substring(n-3,n);
            char f = p.charAt(n-1);
            String fi = part.valueOf(f);
            String ger = p.concat(fi);
            String gerundio = ger.concat("ing");
            s.add(gerundio);
            gerundio = p.concat("ing");
            s.add(gerundio);
            fi = p.substring(0, n-1);
            gerundio = fi.concat("ing");
            s.add(gerundio);

        }
    }

    private void generatePastParticiple (String p, ArrayList<String> s) {
        if (p.length() < 3) {
           String fi = p.concat("ed");
           s.add(fi);
           fi = p.concat("d");
           s.add(fi);
           char f = p.charAt(p.length() -1);
           fi = p.valueOf(f);
           String fin = p.concat(fi);
           fi = fin.concat("ed");
           s.add(fi);

        }
        else {
            int n = p.length();
            String part = p.substring (0, n-3);
            int m = n - 3;
            String partverb;
            char f = p.charAt(m+2);
            String fi = p.valueOf(f);
            String casi = p.concat(fi);
            String pasat = casi.concat ("ed");
            s.add(pasat);
            fi = p.concat ("ed");
            s.add(fi);
            fi = p.concat("d");
            s.add(fi);
            String fin = p.substring(0,n-1);
            fi = fin.concat("ied");
            s.add(fi);
        }
    }
}